home *** CD-ROM | disk | FTP | other *** search
/ Apple WWDC 1996 / WWDC96_1996 (CD).toast / Technology Materials / QuickTime VR / MacOS / QuickDraw™ 3D 1.0.6F4 SDK / Development / 3DMF parser / 0.9 version / MF3D.H < prev    next >
Encoding:
C/C++ Source or Header  |  1995-05-24  |  7.3 KB  |  210 lines  |  [TEXT/MPS ]

  1. #ifndef MF3D_H
  2. #define    MF3D_H
  3. /*==============================================================================
  4.  *
  5.  *    File:        MF3D.H
  6.  *
  7.  *    Function:    QuickDraw 3D Metafile Read/Write API
  8.  *
  9.  *    Author(s):    Rick Wong (RWW), Duet Development Corp.
  10.  *
  11.  *    Copyright:    (c) 1995 by Apple Computer, Inc., all rights reserved.
  12.  *
  13.  *    Example:    A simple metafile viewer will look something like:
  14.  *
  15.  *                MF3DOpenInputStdCFile(filename, &metafile);
  16.  *                while (MF3DReadAnObject(metafile, &object) != kMF3DErrNoMoreObjs)
  17.  *                {    if (object->objectType == kMF3DObjReference)
  18.  *                    {    MF3DResolveReference(metafile, object, NULL);
  19.  *                    }
  20.  *                    else
  21.  *                    {    switch(object->objectType)
  22.  *                        {    ...Handle each object type appropriately...
  23.  *                        }
  24.  *                    }
  25.  *                    DisposeObject(object);
  26.  *                }
  27.  *                MF3DClose(metafile);
  28.  *
  29.  *    Change History (most recent first):
  30.  *        Fabio    Changed file name to 8 characters
  31.  *        F2R_RWW    Change to simple object theory.
  32.  *        F28_RWW    Finished definitions and added comments.
  33.  *        F21_RWW    File created.
  34.  *==============================================================================
  35.  */
  36. #if defined(__COMPILING_ON_MACINTOSH__)
  37. #pragma once
  38. #endif
  39.  
  40. #include "MFIOCALL.H"
  41. #include "MFOBJCTS.H"
  42. #include "MFTYPES.H"
  43. #include "MFINTOBJ.H"
  44.  
  45. #define    kMF3DVersionMajor    0
  46. #define    kMF3DVersionMinor    8
  47. #define    kAllowVariableUns    FALSE
  48.  
  49. /*==============================================================================
  50.  *    API Routines
  51.  *==============================================================================
  52.  */
  53.  
  54. /*==============================================================================
  55.  *    MF3DOpenInput
  56.  *
  57.  *    Open a metafile for parsing using caller-defined file-handling routines.
  58.  *==============================================================================
  59.  */
  60. MF3DErr
  61. MF3DOpenInput(
  62.     MF3DUserOpenDataPtr    inUserDataPtr,        /* In:  user-defined file info    */
  63.     MF3DProcsPtr        inUserIOProcsPtr,    /* In:  user-defined I/O procs    */
  64.     MF3D_FilePtr *        outMF3DFilePtr);    /* Out: MF3D file structure        */
  65.  
  66. /*==============================================================================
  67.  *    MF3DOpenInputStdCFile
  68.  *
  69.  *    Open a metafile for parsing using standard C routines.
  70.  *
  71.  *    This routine just calls MF3DOpenInput with inUserDataPtr = inFilename
  72.  *    and inUserIOProcsPtr set to call fopen, fread, NULL, ftell, fseek,
  73.  *    and fclose.
  74.  *==============================================================================
  75.  */
  76. MF3DErr
  77. MF3DOpenInputStdCFile(
  78.     const char *    inFilename,            /* In:  C-string filename            */
  79.     MF3D_FilePtr *    outMF3DFilePtr);    /* Out: MF3D file structure            */
  80.  
  81. /*==============================================================================
  82.  *    MF3DReadAnObject
  83.  *
  84.  *    Retrieve the next metafile object in an open metafile.
  85.  *
  86.  *    Metafile objects are defined in <MFOBJCTS.H>. They can be recognized
  87.  *        by checking the fObjectType field and casting the object pointer
  88.  *        appropriately.
  89.  *
  90.  *    Objects returned by MF3DReadAnObject should be disposed using
  91.  *        MF3DDisposeObject when they are no longer needed. If an error occurs,
  92.  *        NULL will be returned (MF3DDisposeObject ignores NULL parameters).
  93.  *
  94.  *    Returns:
  95.  *        kMF3DNoErr                object was successfully read
  96.  *        kMF3DNoMoreObjects        the end of the file has been reached
  97.  *==============================================================================
  98.  */
  99. MF3DErr
  100. MF3DReadAnObject(
  101.     MF3D_FilePtr    inMF3DFilePtr,        /* In:  MF3D file structure            */
  102.     MF3DVoidObjPtr *outMF3DObjPtr);        /* Out: metafile object                */
  103.  
  104. /*==============================================================================
  105.  *    MF3DDisposeObject
  106.  *
  107.  *    Dispose a metafile object.
  108.  *    If inMF3DObjPtr is NULL, nothing happens.
  109.  *==============================================================================
  110.  */
  111. MF3DErr
  112. MF3DDisposeObject(
  113.     MF3DVoidObjPtr    inMF3DObjPtr);        /* In:  metafile object                */
  114.  
  115. /*==============================================================================
  116.  *    MF3DResolveReference
  117.  *
  118.  *    Set up an MF3D file so that it will read the object pointed to by
  119.  *    a reference object. The next call to MF3DReadAnObject will then read
  120.  *    the referenced object, and the MF3D file will then be reset to read the
  121.  *    object that would have been read if MF3DResolveReference had not been
  122.  *    called.
  123.  *
  124.  *    If MF3DResolveReference resolves to a group object, the entire group will
  125.  *    be read before the MF3D file is reset.
  126.  *
  127.  *    If inStoragePtr is not NULL, the reference is in an external file.
  128.  *==============================================================================
  129.  */
  130. MF3DErr
  131. MF3DResolveReference(
  132.     MF3D_FilePtr        inMF3DFilePtr,         /* In:  MF3D file structure        */
  133.     MF3DReferenceObjPtr    inMF3DRefObjPtr,     /* In:  reference object        */
  134.     MF3DStorageObjPtr    inExternalFilePtr);    /* In:    external storage object    */
  135.  
  136. /*==============================================================================
  137.  *    MF3DClose
  138.  *
  139.  *    Close the metafile.
  140.  *
  141.  *    If inMF3DFilePtr is NULL, nothing happens.
  142.  *==============================================================================
  143.  */
  144. MF3DErr
  145. MF3DClose(
  146.     MF3D_FilePtr    inMF3DFilePtr);            /* In:  MF3D file structure        */
  147.  
  148. /*==============================================================================
  149.  *    MF3DOpenOutput
  150.  *
  151.  *    Open a metafile for writing using caller-defined file-handling routines.
  152.  *==============================================================================
  153.  */
  154. MF3DErr
  155. MF3DOpenOutput(
  156.     MF3DDataFormatEnum    inMF3DDataFormat,    /* In:  binary or text            */
  157.     MF3DUserOpenDataPtr    inUserDataPtr,        /* In:  user-defined file info    */
  158.     MF3DProcsPtr        inUserIOProcsPtr,    /* In:  user-defined I/O procs    */
  159.     MF3D_FilePtr *        outMF3DFilePtr);    /* Out: MF3D file structure        */
  160.  
  161. /*==============================================================================
  162.  *    MF3DOpenOutputStdCFile
  163.  *
  164.  *    Open a metafile for writing using standard C routines.
  165.  *
  166.  *    This routine just calls MF3DOpenOutput with inUserDataPtr = inFilename
  167.  *    and inUserIOProcsPtr set to call fopen, fread, fwrite, ftell, fseek,
  168.  *    and fclose.
  169.  *==============================================================================
  170.  */
  171. MF3DErr    MF3DOpenOutputStdCFile(
  172.     MF3DDataFormatEnum    inMF3DDataFormat,    /* In:  binary or text            */
  173.     const char *        inFilename,            /* In:  C-string filename        */
  174.     MF3D_FilePtr *        outMF3DFilePtr);    /* Out: MF3D file structure        */
  175.  
  176. /*==============================================================================
  177.  *    MF3DWriteAnObject
  178.  *
  179.  *    Write a metafile object to an open metafile.
  180.  *==============================================================================
  181.  */
  182. MF3DErr
  183. MF3DWriteAnObject(
  184.     MF3D_FilePtr    inMF3DFilePtr,            /* In:  MF3D file structure        */
  185.     MF3DVoidObjPtr    inMF3DObjPtr);            /* In:  metafile object            */
  186.  
  187. /*==============================================================================
  188.  *    MF3DTellPosition
  189.  *
  190.  *    Retrieve the position of an open metafile.
  191.  *==============================================================================
  192.  */
  193. MF3DErr
  194. MF3DTellPosition(
  195.     MF3D_FilePtr                inMF3DFilePtr,    /* In:  MF3D file structure    */
  196.     MF3DBinaryFilePosition *    outMF3DPosPtr);    /* Out: file offset            */
  197.  
  198. /*==============================================================================
  199.  *    MF3DSeekPosition
  200.  *
  201.  *    Set the position of an open metafile.
  202.  *==============================================================================
  203.  */
  204. MF3DErr
  205. MF3DSeekPosition(
  206.     MF3D_FilePtr            inMF3DFilePtr,        /* In:  MF3D file structure    */
  207.     MF3DBinaryFilePosition    inMF3DPosition);    /* In:  file offset            */
  208.  
  209. #endif
  210.